Ò»¡£OnInitDialogÀï»ñÈ¡µ±Ç°DPI ²Î¿¼´úÂ룺 int nScale = CDpiHelper::getScale(m_hWnd); nScale = NormalizeScale(nScale); if (nScale > 100) { SDispatchMessage(UM_SETSCALE, nScale, 0); CRect rcWnd = GetWindowRect(); int nNewWid = rcWnd.Width() * nScale / 100; int nNewHei = rcWnd.Height() * nScale / 100; SetWindowPos(0, 0, 0, nNewWid, nNewHei, SWP_NOZORDER | SWP_NOMOVE); } NormalizeScaleΪ±ê×¼»¯dpi£¬ÒòΪ¿ÉÄÜÓÐÓû§×Ô¶¨ÒåµÄÇé¿ö£¬¶øsouiÄÚ²¿Ò²»á±ê×¼»¯dpi£¬Èç¹û²»±ê×¼»¯À­Éì»á²»Ò»Ö¡£ const int KBuiltinScales[] = { 100,125,150,175,200//,250,300 }; /*±ê×¼»¯·Å´ó±ÈÀý, Ñ¡Ôñ±È×Ô¼ºÖ¸¶¨±ÈÀýСһºÅµÄ±ÈÀý*/ int NormalizeScale(int nScale) { for (int i = 1; i < ARRAYSIZE(KBuiltinScales); i++) { if (nScale < KBuiltinScales[i]) { return KBuiltinScales[i - 1]; } } return KBuiltinScales[ARRAYSIZE(KBuiltinScales) - 1]; } ±ê×¼»¯º¯Êý¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÒªÇóÀ´×ö£¬ÈçÖ»Ö§³Ö100¡£150¡£200¡£ 2¡£´¦ÀíWM_DPICHANGEDÏûÏ¢¶¯Ì¬¸Ä±äDPI¡£ ²Î¿¼´úÂ룺 void CMainDlg::OnDipChanged(WORD dpi, const RECT * desRect) { int nScale = dpi * 100 / 96; nScale = NormalizeScale(nScale); SDispatchMessage(UM_SETSCALE, nScale, 0); SetWindowPos( NULL, desRect->left, desRect->top, desRect->right - desRect->left, desRect->bottom - desRect->top, SWP_NOZORDER | SWP_NOACTIVATE); } 3¡£ÉèÖÃVSµÄÇåµ¥£ºÏîÄ¿ÓÒ»÷-¡·ÊôÐÔ-¡·ÅäÖÃÊôÐÔ-¡·Çåµ¥¹¤¾ß-¡·ÊäÈëºÍÊä³ö-¡·ÓÒ±ßÑ¡ÔñDPIʶ±ð¹¦ÄÜ£ºÑ¡Ôñÿ¸ö¼àÊÓÆ÷¸ßDPIʶ±ð¡£ 4¡£²Î¿¼demoµÄ¶àÓïÑÔµÄdpi,Ìí¼Ó²»Í¬°æ±¾µÄ×ÊÔ´¡£